<template>
  <div>
    <el-button type="primary" @click="goBack" class="top_back">返回</el-button>
    <div style="border: 1px solid #ccc;">
      <Toolbar style="border-bottom: 1px solid #ccc" :editor="editor" :defaultConfig="toolbarConfig" :mode="mode" />
      <Editor style="height: 500px; overflow-y: hidden;" v-model="html" :defaultConfig="editorConfig" :mode="mode"
        @onCreated="CreateContent" />
    </div>
    <div class="onsumbit">
      <el-button type="primary" @click="onSumbit">提交内容</el-button>
    </div>
  </div>
</template>

<script>
import '@wangeditor/editor/dist/css/style.css' // 引入 css
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
import { ElMessage } from 'element-plus'
import { getToken } from '@/utils/common/common'
import { ArticleDetailApi, ArticleEditApi } from '../../api/index'
export default {
  name: "WangContent",
  components: { Editor, Toolbar },
  data() {
    return {
      editor: null,
      html: '',
      toolbarConfig: {},
      editorConfig: { placeholder: '请输入内容...' },
      mode: 'default', // or 'simple'
      upload:"http://127.0.0.1:80" + "/upload/up",
      editorConfig: {
        placeholder: '请输入内容...',
        // autoFocus: false,
        // 所有的菜单配置，都要在 MENU_CONF 属性下
        MENU_CONF: {
          // 图片上传
          uploadImage: {
            server: 'http://127.0.0.1/upload/up',
            fieldName: 'file',
            // 单个文件的最大体积限制，默认为 2M
            maxFileSize: 10 * 1024 * 1024, // 10M
            // 最多可上传几个文件，默认为 100
            maxNumberOfFiles: 10,
            // 选择文件时的类型限制，默认为 ['image/*'] 。如不想限制，则设置为 []
            allowedFileTypes: ['image/*'],
            // 自定义上传参数，例如传递验证的 token 等。参数会被添加到 formData 中，一起上传到服务端。
            meta: {
              // token: 'xxx',
              // otherKey: 'yyy'
              // file:''
            },
            // 将 meta 拼接到 url 参数中，默认 false
            metaWithUrl: false,
            // 自定义增加 http  header
            headers: {
              Authorization:getToken()
              // Accept: 'text/x-json',
              // otherKey: 'xxx'
            },
            withCredentials: false,// 跨域是否传递 cookie ，默认为 false
            timeout: 10 * 1000, // 超时时间，默认为 10 秒
            // 上传前
            onBeforeUpload(files) {
              ElMessage({
                message: '图片正在上传中,请耐心等待',
                duration: 0,
                customClass: 'uploadTip',
                iconClass: 'el-icon-loading',
                showClose: true
              });
              return files;
            },
            // 自定义插入图片
            customInsert(res, insertFn) {
              // 因为自定义插入导致onSuccess与onFailed回调函数不起作用,自己手动处理
              // 先关闭等待的Message
              ElMessage.closeAll();
              if (res.code === 1) {
                ElMessage.success({
                  message: `${res.data.name} 上传成功`
                });
              } else {
                ElMessage.error({
                  message: `${res.data.name} 上传失败，请重新尝试`
                });
              }
              insertFn(res.data.path, res.data.name, res.data.path);
            },
            // 单个文件上传成功之后
            onSuccess(file, res) {
              console.log(`${file.name} 上传成功`, res);
            },
            // 单个文件上传失败
            onFailed(file, res) {
              console.log(`${file.name} 上传失败`, res);
            },
            // 上传进度的回调函数
            onProgress(progress) {
              console.log('progress', progress);
              // progress 是 0-100 的数字
            },
            // 上传错误，或者触发 timeout 超时
            onError(file, err, res) {
              console.log(`${file.name} 上传出错`, err, res);
            }
          },
          //视频上传
          uploadVideo: {
            fieldName: 'file',
            server: 'http://127.0.0.1/upload/up',
            // 单个文件的最大体积限制，默认为 10M
            maxFileSize: 50 * 1024 * 1024, // 50M
            // 最多可上传几个文件，默认为 5
            maxNumberOfFiles: 3,
            // 选择文件时的类型限制，默认为 ['video/*'] 。如不想限制，则设置为 []
            allowedFileTypes: ['video/*'],
            // 自定义上传参数，例如传递验证的 token 等。参数会被添加到 formData 中，一起上传到服务端。
            meta: {
              // token: 'xxx',
              // otherKey: 'yyy'
            },
            // 将 meta 拼接到 url 参数中，默认 false
            metaWithUrl: false,
            // 自定义增加 http  header
            headers: {
              Authorization:getToken()
              // Accept: 'text/x-json',
              // otherKey: 'xxx'
            },
            // 跨域是否传递 cookie ，默认为 false
            withCredentials: false,
            // 超时时间，默认为 30 秒
            timeout: 1000 * 1000, // 1000 秒,
            // 上传之前触发
            onBeforeUpload(file) {
              ElMessage({
                message: '视频正在上传中,请耐心等待',
                duration: 0,
                customClass: 'uploadTip',
                iconClass: 'el-icon-loading',
                showClose: true
              });
              return file;
            },
            // 自定义插入视频
            customInsert(res, insertFn) {
              // 因为自定义插入导致onSuccess与onFailed回调函数不起作用,自己手动处理
              // 先关闭等待的Message
              ElMessage.closeAll();
              if (res.code === 1) {
                ElMessage.success({
                  message: `${res.data.name} 上传成功`
                });
              } else {
                ElMessage.error({
                  message: `${res.data.name} 上传失败，请重新尝试`
                });
              }
              insertFn(res.data.path, res.data.path);
            },
            // 上传进度的回调函数
            onProgress(progress) {
              console.log(progress);
              // onProgress(progress) {       // JS 语法
              // progress 是 0-100 的数字
            },

            // // 单个文件上传成功之后
            // onSuccess(file, res) {
            //   console.log(`${file.name} 上传成功`, res);
            //   this.successMsg(file);
            // },

            // // 单个文件上传失败
            // onFailed(file, res) {
            //   console.log(`${file.name} 上传失败`, res);
            //   this.errorMsg(file);
            // },

            // 上传错误，或者触发 timeout 超时
            onError(file, err, res) {
              console.log(`${file.name} 上传出错`, err, res);
              Notification.error({
                title: '错误',
                message: `${file.name} 上传失败，请重新尝试`
              });
            }
          }
        }
      },
    }
  },
  methods: {
    CreateContent(editor) {
      this.editor = Object.seal(editor) // 一定要用 Object.seal() ，否则会报错
    },
    goBack() {
      this.$router.go(-1)
    },
    getDetailArticle() {
      ArticleDetailApi(this.$route.query.id).then(res => {
        console.log(res, '文章的详情');
        if (res.data.code == 1) {
          this.html = res.data.data.content
        } else {
          this.$message.error(res.msg)
        }
      })
    },
    onSumbit() {
      console.log(123456);
      ArticleEditApi({
        id: this.$route.query.id,
        content: this.html
      }).then(res => {
        console.log(123456);
        if (res.data.code == 1) {
          this.$message({
            type: "success",
            message: res.data.msg,
            duration: 1500,
            onClose: () => {
              this.goBack()
            },
          });
        } else {
          this.$message({
            type: "error",
            message: res.data.msg,
            onClose: () => {
              this.goBack()
            },
          });
        }
      })
    }
  },
  mounted() {
    // 模拟 ajax 请求，异步渲染编辑器
    this.getDetailArticle()
  },
  beforeDestroy() {
    const editor = this.editor
    if (editor == null) return
    editor.destroy() // 组件销毁时，及时销毁编辑器
  },

}
</script>

<style lang="scss" scoped>
.top_back {
  margin-bottom: 20px
}

.onsumbit {
  display: flex;
  justify-content: center;
  align-items: center;
  margin-top: 40px
}
</style>